/**
 * Proyecto: Cognitum
 * Global IT Services 2008
 * @author Esanantonio
 */
Cognitum.Polizas.Carta.Entity = function(){
    if (LOG.isDebugEnabled()) {
        LOG.debug('[Carta.Entity.ctor] <-');
    }
    Cognitum.Polizas.Carta.Entity.superclass.constructor.call(this, false, true);
}

Ext.extend(Cognitum.Polizas.Carta.Entity, Karma.Core.Entity, {
    id: 'Carta.Entity',
    name: 'Cartas',
    editorXType: 'carta.editor',
    editorW: 1000,
    editorH: 700,

    ObtienePlantillasPolizaMethod: 'ObtienePlantillasPoliza',
    ObtienePlantillasEndosoMethod: 'ObtienePlantillasEndoso',
    ObtienePlantillasSiniestroMethod: 'ObtienePlantillasSiniestro',
    ObtienePlantillasComplementoSinMethod: 'ObtienePlantillasComplementoSin',
    ObtienePlantillasSolicitudMensajeriaMethod: 'ObtienePlantillasSolicitudMensajeria',
    ObtienePlantillasReciboMethod: 'ObtienePlantillasRecibo',
    GeneraCartaPolizaMethod: 'GeneraCartaPoliza',
    GeneraCartaEndosoMethod: 'GeneraCartaEndoso',
    GeneraCartaSiniestroMethod: 'GeneraCartaSiniestro',
    GeneraCartaSolicitudMensajeriaMethod: 'GeneraCartaSolicitudMensajeria',
    GeneraCartaComplementoSinMethod: 'GeneraCartaComplementoSin',
    GeneraCartaReciboMethod: 'GeneraCartaRecibo',
    EnviarPorEmailMethod: 'EnviarPorEmail',
    ObtienePlantillasLiquidacionMethod: 'ObtienePlantillasLiquidacion',
    GeneraCartaLiquidacionMethod: 'GeneraCartaLiquidacion',
    
    onEnviarPorEmail: function() {
        if (LOG.isDebugEnabled()) {
            LOG.debug('[Carta.Entity.onEnviarPorEmail] <- method: ' + method);
        }



        if (LOG.isDebugEnabled()) {
            LOG.debug('[Carta.Entity.onEnviarPorEmail] -> method: ' + method);
        }
    },

    onNuevaCartaEditable: function(method, id, plantillaId) {
        if (LOG.isDebugEnabled()) {
            LOG.debug('[Carta.Entity.nuevaCartaEditable] <- method: ' + method);
            LOG.debug('[Carta.Entity.nuevaCartaEditable] <- id: ' + id);
            LOG.debug('[Carta.Entity.nuevaCartaEditable] <- plantilla: ' + plantillaId);
        }
        this.useInvoker(method, [id, plantillaId], {
            fn: function(html) {
                if (LOG.isDebugEnabled()) {
                    LOG.debug('[Carta.Entity.nuevaCartaEditable_cb] ---- Carta Generada :)');
                    LOG.debug('[Carta.Entity.nuevaCartaEditable_cb] ---- ID: ' + id);
                    LOG.debug('[Carta.Entity.nuevaCartaEditable_cb] ---- Plantilla: ' + plantillaId);
                }
                Karma.Editor.Window.create({
                    editorXType: 'carta.editor',
                    entity: this,
                    isNew: true,
                    width: this.editorW,
                    height: this.editorH,
                    editorProperties: {
                        entId: id,
                        contenido: html,
                        plantId: plantillaId,
                        listeners: {
                            'guardaCarta': {
                                fn: function(entId, nombre, desc, contenido, id, ventana, cierraVentana) {
                                    if (LOG.isDebugEnabled()) {
                                        LOG.debug('[Carta.Entity.guardaCarta_event] <- ');
                                        LOG.debug('[Carta.Entity.guardaCarta_event] ---- ID: ' + polId);
                                        LOG.debug('[Carta.Entity.guardaCarta_event] ---- Plantilla: ' + plantId);
                                    }
                                    this.useInvoker(this.GuardaCartaMethod, [polId, cartaForm.cartaId, nombre, desc, contenido, plantId], {
                                        fn: function(cartaId) {
                                            if (LOG.isDebugEnabled()) {
                                                LOG.debug('[Carta.Entity.guardaCarta_cb] <-  ' + cartaId);
                                            }
                                            cartaForm.cartaId = cartaId;
                                            if (cierraVentana)
                                                ventana.close();
                                            if (LOG.isDebugEnabled()) {
                                                LOG.debug('[Carta.Entity.guardaCarta_cb] -> ');
                                            }

                                        },
                                        scope: this
                                    });
                                },
                                scope: this
                            }
                        }
                    }
                });
            },
            scope: this
        });
    },

    onNuevaCartaNoEditable: function(method, id, plantillaId) {
        if (LOG.isDebugEnabled()) {
            LOG.debug('[Siniestro.Entity.nuevaCartaNoEditable] <- ID: ' + id);
            LOG.debug('[Siniestro.Entity.nuevaCartaNoEditable] <- PLANTILLA: ' + plantillaId);
        }
        this.useInvoker(method, [id, plantillaId], {
            fn: function(html) {
                if (LOG.isDebugEnabled()) {
                    LOG.debug('[Siniestro.Entity.nuevaCartaNoEditable_Cb] ---- Carta Generada :)');
                }
                var popup = window.open("preview.html");
                popup.document.write(html);
            },
            scope: this
        });
    },

    getMenu: function(mehotd, generaCartaMethod, id, callback) {
        this.useInvoker(mehotd, id, {
            fn: function(plantillas) {
                LOG.debug('[Carta.getMenu] Plantillas: ' + plantillas);
                var arr = new Array();
                if (Ext.isEmpty(plantillas)) {
                    callback.fn.createDelegate(callback.scope)(new Ext.Button({
                        text: 'Cartas',
                        disabled: (arr.length == 0)
                    }));
                }
                else {
                    Ext.each(plantillas, function(plantilla, idx) {
                        LOG.debug('[Carta.getMenu] Plantilla: ' + plantilla.Nombre);
                        arr.push({
                            text: plantilla.Nombre,
                            handler: plantilla.IsEditable ?
								this.onNuevaCartaEditable.createDelegate(this, [generaCartaMethod, id, plantilla.Id]) :
								this.onNuevaCartaNoEditable.createDelegate(this, [generaCartaMethod, id, plantilla.Id]),
                            scope: this
                        });
                    }, this);
                    callback.fn.createDelegate(callback.scope)(new Ext.Button({
                        text: 'Cartas',
                        menu: {
                            items: arr
                        },
                        disabled: (arr.length == 0)
                    }));
                }
            },
            scope: this
        });
    },


    getMenuPoliza: function(polizaId, callback) {
        this.getMenu(this.ObtienePlantillasPolizaMethod, this.GeneraCartaPolizaMethod, polizaId, callback);
    },

    getMenuEndoso: function(endosoId, callback) {
        this.getMenu(this.ObtienePlantillasEndosoMethod, this.GeneraCartaEndosoMethod, endosoId, callback);
    },

    getMenuSiniestro: function(siniestroId, callback) {
        this.getMenu(this.ObtienePlantillasSiniestroMethod, this.GeneraCartaSiniestroMethod, siniestroId, callback);
    },

    getMenuComplementoSin: function(complementoId, callback) {
        this.getMenu(this.ObtienePlantillasComplementoSinMethod, this.GeneraCartaComplementoSinMethod, complementoId, callback);
    },

    getMenuSolicitudMensajeria: function(solicitudId, callback) {
        this.getMenu(this.ObtienePlantillasSolicitudMensajeriaMethod, this.GeneraCartaSolicitudMensajeriaMethod, solicitudId, callback);
    },

    getMenuRecibo: function(reciboId, callback) {
        this.getMenu(this.ObtienePlantillasReciboMethod, this.GeneraCartaReciboMethod, reciboId, callback);
    },

    getMenuLiquidacion: function(reciboId, callback) {
        this.getMenu(this.ObtienePlantillasLiquidacionMethod, this.GeneraCartaLiquidacionMethod, reciboId, callback);
    }    

});

Cognitum.Cartas = Cognitum.Polizas.Carta.Entity;
